package list;

/**
 * 题目：求两个链表的和
 * y:
 *  1->2->3   321
 *  5->6->7->8  8765
 *  相加为
 *  6->8->0->9
 * @Author Gavin
 * @date 2022.01.02 11:30
 */
public class list_6 {
    /**
     * 解题思路：
     * 数字相加，都是从低位开始加，假如链表表示的数是从高位到地位，那么就
     * 先翻转链表，本题的链表表示的数组是从低位到高位
     *
     * 然后用一个中间变量来存储进位的大小，依次遍历每个节点的值，把每个节点的值
     * 和进位信息相加就得到当前位的值
     */
    public static ListNode solution(ListNode l1,ListNode l2){
        ListNode dummy=new ListNode(0),p=dummy;
        int carry=0;
        while (carry!=0||l1!=null||l2!=null){
            int sum=carry;
            if(l1!=null){
                sum+=l1.val;
                l1=l1.next;
            }
            if(l2!=null){
                sum+=l2.val;
                l2=l2.next;
            }
            carry=sum/10;
            p.next=new ListNode(sum%10);
            p=p.next;
        }
        return dummy.next;
    }
}
